【图论

您所在的位置:网站首页 拓扑排序 队列是什么 【图论

【图论

2024-07-14 10:21| 来源: 网络整理| 查看: 265

ฅ(๑˙o˙๑)ฅ 大家好, 欢迎大家光临我的博客:面向阿尼亚学习 算法学习笔记系列持续更新中~

阿

文章目录 一、前言二、算法流程三、有向图的拓扑排序最后

一、前言

拓扑排序(Topological Sorting) 若一个由图中所有点构成的序列 A 满足:对于图中的每条边 (x,y),x 在 A 中都出现在 y 之前,则称 A 是该图的一个拓扑序列。

且该序列必须满足下面两个条件:

每个顶点出现且只出现一次。若存在一条从顶点 x到顶点 y的路径,那么在序列中顶点 x 出现在顶点 y的前面。

拓扑排序只适用于 AOV网 (有向无环图) 若图中有环,则一定不存在拓扑序。 可以证明,一个有向无环图,一定存在一个拓扑序列。有向无环图,又被称为拓扑图。

入度: 即有多少条边指向自己这个节点。

出度: 即有多少条边从自己这个节点指出去。

二、算法流程

算法流程:

用队列来执行 ,初始化所有入度为0的顶点入队。

主要由以下两步循环执行,直到不存在入度为 0 的顶点为止

选择一个入度为 0 的顶点,并将它输出; 删除图中从顶点连出的所有边。 循环结束,

若输出的顶点数小于图中的顶点数,则表示该图存在回路,即无法拓扑排序,

否则,输出的就是拓扑序列 (不唯一)

模板如下:

1.数组模拟队列实现拓扑排序

bool topsort() { int hh = 0, tt = -1; // in[i] 存储点i的入度 for (int i = 1; i a >> b; add(a,b); in[b] ++;// a -> b , b的入度++ } if(topsort() == 0) cout


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3